- 1402/03/08
- 0
- 92
بارگذاری فایل اکسل در Asp.Net Core
سلام.
اگر بخواهیم در ASP.net Core یک فایل اکسل را وارد دیتابیس کنیم که حدود حجم 1 الی 5 مگ را دارد. باید به چه صورت عمل کنیم. باید فایل را آپلود کنیم و بعد شیت و اسم ستونها را تطابق بدهیم؟ یا راه دیگری هم دارد.
ممنون
- 1402/03/09
سلام. برای انجام این کار در ASP.NET Core میتوانید از کتابخانههای موجود استفاده کنید که امکان خواندن فایل اکسل و تبدیل آن به دیتابیس را فراهم میکنند.
یکی از کتابخانههایی که برای این کار استفاده میشود، EPPlus است. این کتابخانه برای کار کردن با فایلهای اکسل در .NET Core بسیار مفید است.
در زیر یک مثال از چگونگی استفاده از این کتابخانه را میبینید:
public async Task<IActionResult> Import(IFormFile formFile, CancellationToken cancellationToken)
{
if (formFile == null || formFile.Length <= 0)
{
return BadRequest("فایل اکسلی انتخاب نشده است.");
}
if (!Path.GetExtension(formFile.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
{
return BadRequest("فرمت فایل باید .xlsx باشد.");
}
var list = new List<MyEntity>();
using (var stream = new MemoryStream())
{
await formFile.CopyToAsync(stream, cancellationToken);
using (var package = new ExcelPackage(stream))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // first sheet
var rowCount = worksheet.Dimension.Rows;
for (int row = 2; row <= rowCount; row++)
{
list.Add(new MyEntity
{
// Assuming column 1 is the "Name" and column 2 is the "Age"
Name = worksheet.Cells[row, 1].Value.ToString().Trim(),
Age = int.Parse(worksheet.Cells[row, 2].Value.ToString().Trim()),
});
}
}
}
// TODO: Save the list into your database
// _dbContext.AddRange(list);
// await _dbContext.SaveChangesAsync();
return Ok();
}
- 1402/03/10
سلام. ممنون از جواب خوب شما. یک راه دیگه پیدا کرده بودم ولی این جواب ساده تر هست.
فقط دو مشکل برای پیاده سازی دارم اینکه من از معماری Clean استفاده میکنم و این کدها را در سرویس نوشتم و یک اینترفیس برای آن در نظر گرفتم که متاسفانه اینترفیس نمیتواند async باشد.
دوم اینکه AddRange() نیاز به لیست از نوع Entity دارد و لیست از نوع Dto که معادل Entity هست را قبول ندارد.
ممنون میشم مشکل این راه را هم بفرمایید
- 1402/03/10
public abstract class IImportCatalogService
{
public virtual Task<ResultDto> ImportCatalog(IFormFile formFile, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
آیا اینترفیس را به این صورت بنویسم مشکلی پیش خواهد آمد؟ و سپس پیاده سازی را هم override کنم.
- 1402/03/10
تشکر از لطفتون. مشکل اولم حل شد. متاسفانه بنده در نوشتم خطا داشتم و مشکل اول حل شد.
پاسخی برای این باگ ارسال کنید
لطفا کدها را درون قطعه کد ارسال نمایید
برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری